package toOffer;

/**
 * <h3>leetcode</h3>
 *
 * @author BigFaceCat
 * @date 2024/1/21 11:59
 * @description <p>寻找数组的中心下标</p>
 */

import java.util.Arrays;

/**
 * 题目：输入一个整数数组，如果一个数字左边的子数组的数字之和等
 * 于右边的子数组的数字之和，那么返回该数字的下标。如果存在多个这样
 * 的数字，则返回最左边一个数字的下标。如果不存在这样的数字，则返回
 * -1。例如，在数组[1, 7, 3, 6, 2, 9]中，下标为 3 的数字（值为 6）的左边 3
 * 个数字 1、7、3 的和与右边两个数字 2 和 9 的和相等，都是 11，因此正确
 * 的输出值是 3。
 */
public class toOffer2_3_12 {
    public static void main(String[] args) {
        int[] nums = {1, 7, 3, 6, 5, 6};
        System.out.println(pivotIndex(nums));
    }

    /**
     * @param nums
     * @return
     */
    public static int pivotIndex(int[] nums) {
        int lSum = 0;
        int rSum = Arrays.stream(nums).sum();
        //随着num右移rSum越来越小，lSum越来越大
        for (int i = 0; i < nums.length; i++) {
            //特殊情况i=0，左边没有值
            if (i != 0) {
                lSum += nums[i - 1];
            } else {
                lSum = 0;
            }
            rSum -= nums[i];
            if (lSum == rSum) {
                return i;
            }
        }

        return -1;
    }
}
